#include "FreertosStart.h"
#include <stdio.h>
#include "HeartTask.h"
#include "GatherTask.h"
#include "ExecutorTask.h"
#include "FreertosCommon.h"
#include "BluetoothTask.h"
#include "ConfigTask.h"
#define START_TASK_NAME "startTask"
#define START_TASK_STACK_DEPTH 128
#define START_TASK_PRIORITY 5
TaskHandle_t  startTaskHandle;
extern QueueHandle_t configMsgQueueHandle;
void startTaskFun(void *p)
{
	
	//临界区，以下代码是一个原子性操作，只要进入不可被打断
	taskENTER_CRITICAL(); /* 进入临界区 */
	
	//有一些统一初始化就放到这里面
	//队列中放的是指针，就要给它地址
	configMsgQueueHandle = xQueueCreate(10,sizeof(char*));

	
	//各个任务初始化
	heartTaskInit();
	gatherTaskInit();
	executorTaskInit();
	bluetoothTaskInit();
	configTaskInit();
	
	
	
	//创建任务
	heartTaskCreate();
	gatherTaskCreate();
	executorTaskCreate();
	bluetoothTaskCreate();
	configTaskCreate();
	vTaskDelete(NULL); //删除当前任务
	taskEXIT_CRITICAL(); /* 退出临界区 */
	
	
}
void freertosStart(){


	
	//创建一个启动任务
	BaseType_t result = xTaskCreate(
		startTaskFun,
		START_TASK_NAME,
		START_TASK_STACK_DEPTH,
		NULL,
		START_TASK_PRIORITY,
		&startTaskHandle
	);
	
	if(result==pdPASS)
		printf("create start task sucess!\r\n");
	else
	  printf("create start task fail!\r\n");
	
	//开启调度器
	vTaskStartScheduler();

}